Carry speaker assignments into the live transcript engine - #7286
Merged
Conversation
✅ Deploy Preview for anarlog canceled.
|
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 09:39
cad6b3b to
8c0f273
Compare
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 10:00
8c0f273 to
c67c3c8
Compare
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 10:06
c67c3c8 to
a9f1afd
Compare
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 10:18
a9f1afd to
f3a2de5
Compare
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 10:28
f3a2de5 to
333c46e
Compare
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 10:30
333c46e to
ba0ee06
Compare
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 10:52
ba0ee06 to
3dca13c
Compare
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
2 times, most recently
from
September 3, 2026 11:24
980c2cc to
f73bcd3
Compare
Base automatically changed from
fix/system-audio-follows-meeting-app
to
main
September 3, 2026 11:41
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 11:41
87f5307 to
fa8adfe
Compare
Naming a speaker mid-meeting only relabeled the main transcript view through a JavaScript overlay; the live engine kept emitting unlabeled segments, so the meeting float and plugin snapshot still showed "Speaker N", and a listener refresh started a fresh engine that knew nothing about the pick. The desktop config sync now follows the captured session's newest transcript and pushes its resolved identity assignments with the participant list. The engine folds them into segment building the same way the settled render does (hints first, participant channel defaults after), re-renders the retained window on an identity update so on-screen segments relabel without waiting for the next stream response, and seeds a refreshed listener with the same assignments. Assignment changes never trigger a listener refresh.
The config signature that dedupes live capture pushes outlived the capture: restarting on the same session recomputed the same config, the push was skipped, and the fresh engine, which always starts with no speaker assignments, never got the names. Scope the signature to the store's capture generation so a new capture always pushes once.
ComputelessComputer
force-pushed
the
fix/live-speaker-assignments-in-engine
branch
from
September 3, 2026 11:41
fa8adfe to
75df9ba
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 75df9ba. Configure here.
The wait-for-snapshot gate held every push until the transcript query answered, and a query error or a rejected subscription never opened it, so a failed transcript read also froze participant and language updates for the rest of the session. A failure before the first rows now counts as an empty snapshot and the config runs without names; a failure after them keeps the last known assignments.
ComputelessComputer
deleted the
fix/live-speaker-assignments-in-engine
branch
September 3, 2026 14:41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Naming a speaker mid-meeting only relabeled the main transcript view through
a JavaScript overlay; the live engine kept emitting unlabeled segments, so
the meeting float and plugin snapshot still showed "Speaker N", and a
listener refresh started a fresh engine that knew nothing about the pick.
The desktop config sync now follows the captured session's newest transcript
and pushes its resolved identity assignments with the participant list. The
engine folds them into segment building the same way the settled render does
(hints first, participant channel defaults after), re-renders the retained
window on an identity update so on-screen segments relabel without waiting
for the next stream response, and seeds a refreshed listener with the same
assignments. Assignment changes never trigger a listener refresh.
Note
Medium Risk
Touches live transcription identity resolution and capture config sync across desktop and listener-core; mis-synced assignments could mislabel speakers in live UI, but behavior is heavily tested and failures degrade to unnamed capture.
Overview
Live capture now receives the same speaker identity assignments as the settled transcript render, so meeting float and plugin live segments show real names instead of generic speaker labels after mid-meeting picks or after a capture restart.
The desktop live capture config sync watches the active session’s newest transcript (words + speaker hints), resolves assignments via the same render path as the main UI, and debounces
updateCaptureConfigwithspeaker_assignmentsalongside participants and languages. It waits for the first transcript snapshot before pushing (an empty list clears engine-held names), falls back to unnamed capture if the transcript query fails early, and re-pushes whencaptureGenerationBySessionchanges on the same session.On the Rust side,
speaker_assignmentsflows through session params,CaptureConfigUpdate, and listener startup viaLiveTranscriptEngine::with_speaker_assignments. Identity updates callupdate_identities, merge persisted hints with participant channel defaults when building segments, re-render the retained window so on-screen segments relabel immediately, and emit segment deltas without waiting for the next stream chunk. Assignment-only config changes do not force a listener refresh (only language or expected speaker-count changes do).Reviewed by Cursor Bugbot for commit 7f4b649. Bugbot is set up for automated code reviews on this repo. Configure here.